package org.monster.context.servlet;

import org.dom4j.DocumentException;
import org.monster.context.core.ApplicationFile;
import org.monster.context.core.ConfigService;
import org.monster.context.core.request.HttpRequest;
import org.monster.context.exception.XMLNotFoundException;
import org.monster.context.util.URIUtils;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 服务者上下文配置
 *
 * @author Monster
 */
public class ServletContextConfig implements ServletConfig {

    /**
     * 日志器
     */
    private static final Logger logger = Logger.getLogger(ServletContextConfig.class.getName());
    /**
     * 配置服务
     */
    private ConfigService service = new ConfigService();

    /**
     * @param request 请求
     * @return 字符串
     * @throws DocumentException 稳定异常
     */
    public String getServletConfig(HttpRequest request)
            throws DocumentException {
        String uri = request.getRequestURI();
        // 获取请求的项目名称
        String appName = URIUtils.startWithURI(uri);
        // 请求的Servlet映射（除项目名称）
        String uriMapping = URIUtils.allEndsWithURI(uri);
        // 获取web.xml文件的路径
        String xmlPath = ApplicationFile.getPathWebXml(appName);
        // 获取请求的项目下的web.xml文件的路径地址
        xmlPath = ApplicationFile.getAppsPath() + xmlPath;
        // 获取Servlet配置Classpath
        String classPath = null;
        try {
            classPath = service.resolveConfig(uriMapping, xmlPath);
        } catch (XMLNotFoundException ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return classPath;
    }

    /**
     * 获取 初始化参数
     *
     * @param name 名称
     * @return 字符串
     */
    @Override
    public String getInitParameter(String name) {
        return null;
    }

    /**
     * 获取 初始化参数名
     *
     * @return 字符串列举
     */
    @Override
    public Enumeration<String> getInitParameterNames() {
        return null;
    }

    /**
     * 获取 服务者上下文
     *
     * @return 服务者上下文
     */
    @Override
    public ServletContext getServletContext() {
        return null;
    }

    /**
     * 获取服务者名
     *
     * @return 服务者名
     */
    @Override
    public String getServletName() {
        return null;
    }
}
